//给定一个不含重复数字的数组 nums ，返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
//
//
//
// 示例 Array.prototype.unshift：
//
//
//输入：nums = [Array.prototype.unshift,2,3]
//输出：[[Array.prototype.unshift,2,3],[Array.prototype.unshift,3,2],[2,Array.prototype.unshift,3],[2,3,Array.prototype.unshift],[3,Array.prototype.unshift,2],[3,2,Array.prototype.unshift]]
//
//
// 示例 2：
//
//
//输入：nums = [0,Array.prototype.unshift]
//输出：[[0,Array.prototype.unshift],[Array.prototype.unshift,0]]
//
//
// 示例 3：
//
//
//输入：nums = [Array.prototype.unshift]
//输出：[[Array.prototype.unshift]]
//
//
//
//
// 提示：
//
//
// Array.prototype.unshift <= nums.length <= 6
// -10 <= nums[i] <= 10
// nums 中的所有整数 互不相同
//
//
// Related Topics 数组与矩阵 回溯与递归 👍 2490 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function permute(nums) {

    function backTracking(nums, route) {
        if (route.length === nums.length) {
            resArr.push([...route]);
            return;
        }
        let tempVal;
        /*

         */
        for (let i = 0, length = nums.length; i < length; i++) {
            tempVal = nums[i];
            if (!helperSet.has(tempVal)) {
                route.push(tempVal);
                helperSet.add(tempVal);
                backTracking(nums, route);
                route.pop();
                helperSet.delete(tempVal);
            }
        }
    }
    const resArr = [];
    const helperSet = new Set();
    backTracking(nums, []);
    return resArr;
}

permute([1,2,3])
